home *** CD-ROM | disk | FTP | other *** search
Wrap
2 CLS:KEY OFF:LOCATE 1,30:PRINT "FILE STREWER":LOCATE 2,26:PRINT "ver 1.1 Sept 2, 1984" 3 LOCATE 4,3:PRINT "Copyright (c) 1984 Ken Goosens, 5020 Portsmouth Road, Fairfax, VA 22032" 4 LOCATE 7,2:PRINT "You are granted a limited license to use and distribute this program provided" 5 LOCATE 9,15:PRINT "1. you do not alter or remove this notice" 6 LOCATE 11,15:PRINT "2. you receive no fee or charge for this program" 10 CLEAR:DEFINT A-Z:ON ERROR GOTO 10000 11 DEF FNNSTR$(X)=MID$(STR$(X),2) 12 DEF FNSECONDs! = (val(mid$(time$,4,2))*60+val(mid$(time$,7,2))) 14 PAUSE! = 4:GOSUB 3000:ONE=1 17 DEF SEG = &H1700:QPRINT=0:BLOAD "QPRINT.BIN",QPRINT 'Comment out when compiling 20 NUL$="":EDCHR$=NUL$:SECHR$=NUL$:READ IX,JX:EDCHR$=SPACE$(IX):SECHR$=SPACE$(JX) 25 MAXDIM=99:DIM MAX(99),LO(99),HI(99),STRT(99),EFLDS(99),FIRSTFLD(99),FLD2SCRN(99) 30 DIM RCOL(99),RLEN(99),RORDER(99),CTITLE$(99),NQUO(99),WORDER(99),USED$(99),TEMP(99) 40 FOR I=1 TO IX:READ J:MID$(EDCHR$,I,1)=CHR$(J):NEXT 50 FOR I=1 TO JX:READ J:MID$(SECHR$,I,1)=CHR$(J):NEXT 52 NORBBS=-1:CONSTREW$=NUL$:MXE=0:TOEDIT$=NUL$ 55 MMENU$="R)bbs...S)trew...C)onfigure...Q)uit " 60 REM == IN NEXT STATEMENT PUT NUMBER OF EDIT CHARS OF LEN=1, LEN=2 70 DATA 5,12 80 ' NULL,ESC,C/R,BACKSPACE,TAB 90 DATA 0,27,13,8,9 100 ' INS,DEL,PGDN,PGUP,LEFT,RIGHT,UP,DOWN,END,HOME,ALT-D,ALT-V 110 DATA 82,83,81,73,75,77,72,80,79,71,32,47 120 DIGITS$="0123456789" 130 DIM DIRH$(99) 'array of directory help 140 NPARMS = 11:FLIP = -1 145 zz$=space$(63):hd1$=zz$:hd2$=zz$:ft$=zz$ 150 Q$ = CHR$(34):QCQ$= Q$+","+Q$:LF$=CHR$(10) 155 CR$=CHR$(13):WL=255:USED$(1)=string$(255,chr$(0)) 160 FIRSTROW = 4 'reserve top two lines for status:3rd for header 280 SP$=" ":MID$(MMENU$,37)="([R],S,C,Q)":DEFLT$="R" 285 MAXMAX=1800:DIM E$(1800):CLS 'hard coded so will compile. for Interpreter, can use x 290 DEF FNE(R,C)=((R-1)*MAXFIELDS+C) 292 ' GOSUB 9000 ' CHECK FOR DOS PARM - INCLUDE ONLY IF COMPILING 295 IF A$<>NUL$ THEN SWAP A$,PARM$:IF PARM$="RBBS" THEN X=1:PARM$=NUL$:GOTO 320 ELSE X=2:GOTO 320 300 CLS:LSET ZZ$=MMENU$:RO=1:GOSUB 860:LOCATE RO,49:INPUT "",A$:IF A$=NUL$ THEN A$=DEFLT$ ELSE GOSUB 8000 310 X=INSTR("RSCQ",A$):IF INSTR("Qq",DEFLT$) AND INSTR("Q",A$)=0 THEN DEFLT$="R":MID$(MMENU$,37)="([R],S,C,Q)" 320 ON X GOTO 360,4000,2130,330:BEEP:GOTO 300 330 CLS:SYSTEM 335 LSET ZZ$="Press ESCAPE key when done...":RO=1:GOSUB 860:RETURN 340 LSET ZZ$="Press ESCAPE key when done... ALT-D for directory help":RO=1:GOSUB 860:RETURN 350 FOR I=2 TO MAXFIELDS:STRT(I)=STRT(I-1)+MAX(I-1)+2:NEXT:RETURN 360 IF NORBBS THEN GOSUB 3200 'RBBS edit routine 390 WHSTREW = 1:MINMPP=1 394 MAXFIELDS = 5:GOSUB 8100 398 MOREITEMS = -1 402 LO(1)=32:LO(2)=32:LO(3)=44:LO(4)=31 406 HI(1)=58:HI(2)=127:HI(3)=58:HI(4)=127 410 MAX(1)=LSTREW:MAX(2)=12:MAX(3)=8 420 CTITLE$(1)=MID$("STREW TO",1,MAX(1)):CTITLE$(2)=" FILENAME":CTITLE$(3)=" DATE":CTITLE$(4)=" DESCRIPTION" 430 STRT(1)=0:GOSUB 350:MAX(4)=79-STRT(4) 440 IF EDFILE THEN MAXEDIT=MAXFIELDS-1:FOR I=1 TO MAXEDIT:EFLDS(I)=I:NEXT ELSE MAXEDIT = MAXFIELDS-2:EFLDS(1)=1:EFLDS(2)=3:EFLDS(3)=4 460 FOR I=1 TO MAXFIELDS:FLD2SCRN(I)=1:NEXT 480 LASTSCRN=1:FIRSTFLD(1)=1 490 FIRSTFLD(LASTSCRN+1)=MAXFIELDS 500 MINLEN = 32 510 NREADS = 0 520 BADLN = 0 540 IF TOEDIT$=NUL$ THEN LSET ZZ$="File to edit: ":RO=1:GOSUB 860:LOCATE RO,15:INPUT A$:if A$=nul$ then 300 else GOSUB 8000:SWAP A$,TOEDIT$ 550 IF MID$(TOEDIT$,2,1)<>":" THEN TOEDIT$ = DR$+":"+TOEDIT$ 560 OPEN TOEDIT$ FOR INPUT AS #2 565 OPEN BADFILE$ FOR OUTPUT AS #3:GOSUB 630 570 GOSUB 340:GOSUB 910 580 LSET ZZ$="S)trew...A)bort...E)dit again...([S],A,E)":RO=1:GOSUB 860:LOCATE RO,43:INPUT "",A$:GOSUB 8000 590 ON INSTR("SAE",A$) GOTO 600,300,570 600 GOSUB 1790:IF NOT MOREITEMS THEN 620 610 GOSUB 630:IF NUMENT<1 THEN 620 ELSE 570 620 MID$(MMENU$,37)="(R,S,C,[Q])":DEFLT$="Q":GOTO 300 630 PREVSCRN=0:PREVPAGE=0 'routine to READ in items 640 GOSUB 4700 670 IF EOF(2) THEN CLOSE 2:CLOSE 3:MOREITEMS=0:LSET ZZ$="ALL"+STR$(NREADS)+" lines in "+TOEDIT$+" read. "+STR$(BADLN)+" non-directory lines skipped.":RO=25:GOSUB 860:GOTO 820 680 IF NUMENT >= MAXENTRIES THEN LSET ZZ$="NOT ALL items have been read from "+TOEDIT$:RO=25:GOSUB 860:GOTO 820 690 LINE INPUT #2,LN$:NREADS=NREADS+1:LOCATE 12,32:PRINT NREADS; 700 IF MID$(LN$,22,2)<>" " OR MID$(LN$,13,1)<>SP$ OR LEN(LN$)<MINLEN THEN PRINT #3,LN$:BADLN=BADLN+1:GOTO 670 710 NUMENT = NUMENT + 1 720 IF MID$(LN$,21,1)=SP$ THEN MID$(LN$,14,8)=SP$+MID$(LN$,14,7) 730 IF MID$(LN$,24,1)=SP$ THEN MID$(LN$,24)=MID$(LN$,25)+SP$ 740 L=LEN(LN$) 750 IF MID$(LN$,L,1)=SP$ THEN L=L-1:GOTO 750 ELSE IF L<33 THEN L=33 760 W=FNE(NUMENT,1):E$(W)=D$ 'default directories 770 E$(W+1)=mid$(LN$,1,12) ' file name 780 E$(W+2)=MID$(LN$,24,8) ' date uploaded 790 E$(W+3)=MID$(LN$,34,L-33) ' description 800 E$(W+4)=MID$(LN$,14,8) ' file size 810 GOTO 670 820 IF MAXPERPAGE<1 THEN LASTPAGE=1:GOTO 840 825 LASTPAGE = NUMENT \ MAXPERPAGE 830 IF NUMENT MOD MAXPERPAGE THEN LASTPAGE = LASTPAGE+1 840 R=FIRSTROW:FLD=EFLDS(1):FLDR=FLD:START=STRT(FLD):PO=1:CURRPAGE=1:CURRSCRN=1:IF LASTPAGE=1 THEN LASTROW=FIRSTROW+NUMENT-1 ELSE LASTROW=FIRSTROW+MAXPERPAGE-1 850 GOSUB 1650:RETURN 860 CALL QPRINT (ZZ$,RO,ONE) 870 IF RO=1 THEN LSET HD1$=ZZ$ ELSE IF RO=2 THEN LSET HD2$=ZZ$ ELSE IF RO=25 THEN LSET FT$=ZZ$ 880 RETURN 890 'edit routine 900 BEEP 'entry if bad 910 'entry if got change 920 LOCATE R,START+PO,1,6,7 'entry if changing only cursor 930 X$=INKEY$:IF X$=NUL$ THEN 930 940 X1$=MID$(X$,1,1):X2$=MID$(X$,2,1) 950 A1=ASC(X1$):IF LEN(X2$)<1 THEN A2 = 0 ELSE A2=ASC(X2$) 960 'LOCATE 24,40:PRINT "A1=";A1;" A2=";A2,:LOCATE R,START+PO 980 ON INSTR(EDCHR$,X1$) GOTO 1120,1740,1010,1090,1110 985 IF A1>LO(FLD) AND A1<HI(FLD) THEN 1600 ELSE 900 990 FLDR=X:FLD=EFLDS(FLDR):START=STRT(FLD):X=FLD2SCRN(FLD):IF CURRSCRN=X THEN NEWSCRN=0 ELSE NEWSCRN=-1:CURRSCRN=X 1000 RETURN 1010 FLDCHANGE = 1 'C/R = next field 1020 X = FLDR + FLDCHANGE:PO = 1 1030 IF X >= 1 THEN 1050 ELSE X=MAXEDIT:GOSUB 990:IF NEWSCRN AND LASTSCRN>1 THEN GOSUB 1650 1040 GOTO 1310 'back a row 1050 IF X <= MAXEDIT THEN 1070 ELSE X=1:GOSUB 990: IF NEWSCRN AND LASTSCRN>1 THEN GOSUB 1650 1060 GOTO 1360 'forward a row 1070 GOSUB 990:IF NEWSCRN THEN GOSUB 1650:GOTO 910 ELSE 910 1080 FLDCHANGE = -1:GOTO 1020 'Back a field 1090 IF PO<2 THEN 900 'BACKSP= delete to left 1100 PO = PO - 1:GOTO 1150 'same as move left, del at cursor 1110 PO=1:IF START<STRT(EFLDS(MAXEDIT)) THEN FLDCHANGE=MAXEDIT-FLDR:GOTO 1020 ELSE 1010 'tab 1120 ON INSTR(SECHR$,X2$) GOTO 1130,1150,1160,1230,1250,1300,1310,1360,1370,1390,1490,1400:GOTO 900 1130 INSERTING = NOT INSERTING:LOCATE 24,1:IF INSERTING THEN PRINT "Insert "; ELSE PRINT "Replace"; 1140 GOTO 910 1150 W=FNE(ELEFAC+R,FLD):E$(W)=MID$(E$(W),1,PO-1)+MID$(E$(W),PO+1):GOSUB 1640:GOTO 910 'delete at cursor 1160 FLIP=0 'PgDn 1170 PAGECHANGE = 1 1180 PREV=CURRPAGE:CURRPAGE = ((CURRPAGE-1+LASTPAGE+PAGECHANGE) MOD LASTPAGE) + 1:IF PREV=CURRPAGE THEN 1220 1190 IF CURRPAGE<>LASTPAGE THEN LASTROW = FIRSTROW + MAXPERPAGE - 1 ELSE LASTROW = FIRSTROW + ((NUMENT-1) MOD MAXPERPAGE) 1200 IF FLIP THEN IF R=FIRSTROW THEN R=LASTROW ELSE R=FIRSTROW ELSE IF R>LASTROW THEN R=LASTROW 1210 GOSUB 1650 1220 FLIP=-1:GOTO 910 1230 FLIP = 0 'PgUp 1240 PAGECHANGE = -1:GOTO 1180 1250 COLCHANGE = -1 'left arrow 1260 X = PO + COLCHANGE 1270 IF X<1 THEN 1080 1280 IF X>MAX(FLD) THEN 1010 1290 PO = X:GOTO 910 1300 IF PO>LEN(E$(FNE(ELEFAC+R,FLD))) THEN 1010 ELSE COLCHANGE = 1:GOTO 1260 'right arrow 1310 ROWCHANGE = -1 'up arrow=BACK a row 1320 X = R + ROWCHANGE 1330 IF X<FIRSTROW THEN 1240 'PgUp 1340 IF X>LASTROW THEN 1170 'PgDn 1350 R=X:PO=1:GOTO 910 1360 ROWCHANGE = 1:GOTO 1320 'down arrow=FORWARD a row 1370 X = LEN(E$(FNE(ELEFAC+R,FLD)))+1:IF X>MAX(FLD) THEN X=MAX(FLD) 'end=far right field 1380 COLCHANGE = X-PO:GOTO 1260 1390 R=FIRSTROW:START=STRT(1):FLD=EFLDS(1):PO=1:GOTO 910 'home=left corner 1400 ' alt-V = view current file 1410 ZDR$=UPDR$:ZF$=E$(FNE(ELEFAC+R,2)):GOSUB 2100:IF NOT FILEFOUND THEN CLS:LOCATE 10,20:PRINT "File ";ZF$;" not found":GOTO 1470 1420 X=0:LSET ZZ$="Contents of "+ZF$:RO=1:A$=SPACE$(1) 1425 CLOSE 3:OPEN "R",#3,ZF$,255:FIELD #3, WL AS A$:GOSUB 1462 1427 X#=LOF(3):XT#=X#/255#+1.0# 1430 X=X+1:IF X>XT# THEN 1470 ELSE GET #3,X 1442 PL=1 1444 IF PL>WL THEN 1430 ELSE LL=INSTR(PL,A$,CR$):IF LL AND LL<PL+80 THEN 1446 ELSE 1450 1446 EN=LL-PL:GOSUB 1466:PRINT 1448 PL=LL+2:GOTO 1454 1450 LX=LEN(MID$(A$,PL)):IF LX>80 THEN EN=80 ELSE EN=LX 1452 GOSUB 1466:PL=PL+EN 1454 IF CSRLIN>20 THEN GOSUB 1464:IF NO THEN 1470 ELSE GOSUB 1462 1460 GOTO 1444 1462 CLS:GOSUB 860:LOCATE 3,1:RETURN 1464 LOCATE 24,1:INPUT "More ([Y],N) ",AX$:IF INSTR("YyNn",AX$)>2 THEN NO=-1:YES=0 1465 RETURN 1466 YY=81-POS(0):IF EN<=YY THEN PRINT MID$(A$,PL,EN); ELSE PRINT MID$(A$,PL,YY);MID$(A$,YY+PL,EN-YY); 1467 RETURN 1470 GOSUB 1590 1480 CLOSE 3:GOSUB 1660:GOSUB 340:GOTO 920 1490 ' directory help 1500 CLS:LOCATE 1,30:PRINT "DIRECTORY HELP" 1510 LOCATE 2,30 1520 FOR I=1 TO 96 STEP 5 1530 IF I=96 THEN JX=3 ELSE JX=4 1540 TX=1:FOR J=I TO I+JX 1550 PRINT TAB(TX):PRINT USING "##";J;:PRINT SP$;DIRH$(J);:TX=TX+16 1560 NEXT 1570 NEXT:GOSUB 1590 1580 PREVPAGE=0:PREVSCRN=0:GOSUB 1650:GOTO 910 1590 LOCATE 25,1:PRINT "Press any key to continue...";:X$=INPUT$(1):RETURN 1600 W=FNE(ELEFAC+R,FLD):LL=LEN(E$(W)):IF NOT INSERTING AND PO <= LL THEN MID$(E$(W),PO,1)=X1$:IF PO>=MAX(FLD) THEN 1630 ELSE 1620 1605 IF PO>=MAX(FLD) THEN E$(W)=MID$(E$(W),1,PO-1)+X1$:GOTO 1630 'CHANGE routine 1607 IF LL>=MAX(FLD) THEN PR=LL-PO ELSE PR=LL-PO+1 1610 E$(W)=MID$(E$(W),1,PO-1)+X1$+MID$(E$(W),PO,PR) 1620 GOSUB 1640:COLCHANGE=1:GOTO 1260 1630 GOSUB 1640:GOTO 910 1640 W=FNE(ELEFAC+R,FLD):LL=LEN(E$(W)):LOCATE R,START+1:PRINT E$(W);SPACE$(MAX(FLD)-LL); 1647 RETURN 1650 IF MAXPERPAGE<1 THEN RETURN 'prints current page of entries 1655 IF PREVPAGE = CURRPAGE THEN IF PREVSCRN = CURRSCRN THEN RETURN 1660 CLS:LOCATE 1,1:PRINT HD1$;:LOCATE 1,64:PRINT "P. ";MID$(STR$(CURRPAGE),2);"/";MID$(STR$(LASTPAGE),2);" S. ";MID$(STR$(CURRSCRN),2);"/";MID$(STR$(LASTSCRN),2) 1670 LOCATE 2,1:PRINT HD2$;:LOCATE 25,1:PRINT FT$; 1680 ELEFAC= (CURRPAGE-1)*MAXPERPAGE-FIRSTROW+1 1690 EX=(CURRPAGE-1)*MAXPERPAGE:X=FIRSTFLD(CURRSCRN):Y=FIRSTFLD(CURRSCRN+1)-1 1700 FOR J=X TO Y:LOCATE 3,STRT(J)+1:PRINT CTITLE$(J);:NEXT 1710 FOR I=1 TO LASTROW-FIRSTROW+1:RX=FIRSTROW+I-1 1720 FOR J=X TO Y:SX=STRT(J)+1:CALL QPRINT (E$(FNE(EX+I,J)),RX,SX):NEXT 1730 NEXT:PO=1:PREVPAGE=CURRPAGE:PREVSCRN=CURRSCRN:RETURN 1740 RETURN 'Esc routine 1750 LSET ZZ$="About to save lines - please confirm Okay ([Y],N)?":RO=1:GOSUB 860:INPUT "",A$:IF INSTR("YyNn",A$)>2 THEN RETURN 1760 GOSUB 1790:IF NOT MOREITEMS THEN 1780 1770 GOSUB 630:IF NUMENT<1 THEN 1780 ELSE GOSUB 340:GOTO 910 1780 RETURN 1790 CLS:NX=2:LSET USED$(1)=",":NUSED=1 'SAVE routine 1810 FOR I=1 TO NUMENT ': PRINT "GETTING NUMBER FROM ITEM ";I 1830 SX=1 1840 LAS = INSTR(SX,E$(FNE(I,1))+",",",") 1850 IF LAS<2 THEN 1980 ELSE X=LAS-1 1855 IF MID$(E$(FNE(I,1)),X,1)=" " THEN X=X-1:GOTO 1855 1860 A$=MID$(E$(FNE(I,1)),SX,X+1-SX):L=LEN(A$):J=1 1863 IF INSTR(USED$(J),","+A$+",") THEN 1960 1865 J=J+1:IF J<= NUSED THEN 1863 1866 X=NX+L+1:IF X>255 THEN NUSED=NUSED+1:NX=2:USED$(NUSED)=","+SPACE$(254):X=L+2 1868 MID$(USED$(NUSED),NX,L+1)=A$+",":NX=X 1870 IF WHSTREW=1 THEN GOSUB 2050:IF NOT NUMERIC THEN 1960 1880 F$=PRE$+A$ ':PRINT "From item";i;" SEARCHING FOR ";A$;" SX=";SX;" LAS=";LAS 1900 OPEN F$ FOR APPEND AS #1:LOCATE 10,20:PRINT "STREWING to ";F$;" ... 1";SPACE$(10):P=37+LEN(F$) 1920 J=I:X=SX-1:ON WHSTREW GOSUB 2000,5000 1930 FOR J=I+1 TO NUMENT 1940 X=INSTR(E$(FNE(J,1)),A$):IF X<1 THEN 1950 1942 IF X>1 THEN IF MID$(E$(FNE(J,1)),X-1,1)<>"," THEN 1950 1944 IF X+L<=LEN(E$(FNE(J,1))) THEN IF INSTR(" ,",MID$(E$(FNE(J,1)),X+L,1))=0 THEN 1950 1946 LOCATE 10,P:PRINT J;:ON WHSTREW GOSUB 2000,5000 1950 NEXT:CLOSE 1 1960 SX = LAS + 1 1970 GOTO 1840 1980 NEXT 1990 CLS:RETURN 2000 'PRINT ROUTINE 2010 PRINT #1,USING "\ \";E$(FNE(J,2)); 2020 PRINT #1,USING "\ \";E$(FNE(J,5)); 2030 PRINT #1,USING "\ \";E$(FNE(J,3)); 2040 PRINT #1,E$(FNE(J,4)):RETURN 2050 NUMERIC=-1:X=1 'check a$ to see whether numeric 2060 IF MID$(A$,X,1)=SP$ THEN X=X+1:GOTO 2060 ELSE SX=X:X=LEN(A$) 2065 IF MID$(A$,X,1)=SP$ THEN X=X-1:GOTO 2065 ELSE LX=X 2070 IF LX<1 THEN 2090 ELSE XX=SX 2080 IF INSTR(DIGITS$,MID$(A$,XX,1)) THEN XX=XX+1:IF XX>LX THEN RETURN ELSE 2080 2090 NUMERIC=0:RETURN 2100 IX=1:FILEFOUND=-1:F1$=" :"+ZF$ 'file search routine 2110 MID$(F1$,1,1)=MID$(ZDR$,IX,1):OPEN F1$ FOR INPUT AS #3 2120 RETURN 2130 'CONFIGURATION initialization 2132 LSET ZZ$="FILE to configure (no extension):":RO=1:GOSUB 860 2134 LOCATE RO,35:INPUT "",A$:IF A$=NUL$ THEN 300 2136 GOSUB 8000:SWAP A$,TOEDIT$:GOSUB 3950:IF DF$="RBBS.STW" THEN GOSUB 3200:GOTO 2166 2138 NAME DF$ AS DF$ 2140 GOSUB 3400:GOTO 6000 'Entry when have gen strew config 2142 CLS:LOCATE 10,15:PRINT "Configuration file ";DF$;" not found"; 2144 LSET ZZ$="CREATE new one BASED ON file (<rtn>=start from scratch):":RO=1:GOSUB 860:LOCATE RO,58:INPUT "",TF$:IF TF$=NUL$ THEN GOSUB 5900:GOTO 6000 2146 ORIG$=DF$:SWAP TF$,TOEDIT$:GOSUB 3950 2148 NAME DF$ AS DF$ 2150 GOSUB 3400:SWAP ORIG$,DF$:GOTO 6000 'found config 2166 MAXFIELDS=2:NUMENT = NPARMS + 99 'Config for RBBS 2168 E$(FNE(1,2))= "Name of RBBS file to edit" 2170 E$(FNE(2,2))= "Drive containing RBBS directory files" 2172 E$(FNE(3,2))= "Drive(s) for RBBS uploaded files (ABCDE...)" 2180 E$(FNE(4,2))= "File to write skipped RBBS lines to" 2185 E$(FNE(5,2))= "Allow editing names of uploaded files (Y,N)" 2190 E$(FNE(6,2))= "Default directory # to be written to" 2200 E$(FNE(7,2))= "Maximum lines per screen (1-20)" 2210 E$(FNE(8,2))= "Maximum # of screens of data (1-20)" 2220 E$(FNE(9,2))= "Prefix of file to be written to" 2230 E$(FNE(10,2))= "Length of field identifying strew (1-13)" 2240 E$(FNE(11,2))= "Default mode in editing: R)eplace, I)nsert" 2250 FOR I = NPARMS + 1 TO NUMENT 2260 E$(FNE(I,2))="Help for directory "+MID$(STR$(I-NPARMS),2) 2270 E$(FNE(I,1))=DIRH$(I-NPARMS) 2280 NEXT 2290 E$(FNE(1,1))=TOEDIT$ 2300 E$(FNE(2,1))=DR$ 2310 E$(FNE(3,1))=UPDR$ 2320 E$(FNE(4,1))=BADFILE$ 2325 IF EDFILE THEN E$(FNE(5,1))="Y" ELSE E$(FNE(5,1))="N" 2330 E$(FNE(6,1))=D$ 2340 E$(FNE(7,1))=MID$(STR$(MAXPERPAGE),2) 2350 E$(FNE(8,1))=MID$(STR$(MAXPAGE),2) 2360 E$(FNE(9,1))=PREFX$ 2370 E$(FNE(10,1))=MID$(STR$(LSTREW),2) 2380 IF INSERTING THEN E$(FNE(11,1))="I" ELSE E$(FNE(11,1))="R" 2390 GOSUB 5800 2500 GOSUB 335:GOSUB 910 2510 GOSUB 5700 2520 ON INSTR("STE",A$) GOTO 2540,2530,2500 2530 GOSUB 2550:CLS:GOTO 300 2540 GOSUB 2550:GOTO 2650 2550 TOEDIT$ = E$(FNE(1,1)) 'after done editing 2560 DR$=E$(FNE(2,1)) 2570 UPDR$=E$(FNE(3,1)) 2580 BADFILE$ = E$(FNE(4,1)) 2585 EDFILE$ = E$(FNE(5,1)) 2590 D$=E$(FNE(6,1)) 2600 MAXPERPAGE$ = E$(FNE(7,1)) 2610 MAXPAGE$ = E$(FNE(8,1)) 2620 PREFX$ = E$(FNE(9,1)) 2630 LSTREW$ = E$(FNE(10,1)) 2640 IR$ = E$(FNE(11,1)):GOSUB 2770:RETURN 2650 FOR I=NPARMS+1 TO NUMENT:DIRH$(I-NPARMS)=E$(FNE(I,1)):NEXT 2660 OPEN DF$ FOR OUTPUT AS #3 2670 PRINT #3,Q$;TOEDIT$;QCQ$;DR$;QCQ$;UPDR$;QCQ$;BADFILE$;QCQ$;EDFILE$;QCQ$;D$;QCQ$;MAXPERPAGE$;QCQ$;MAXPAGE$; 2680 PRINT #3,QCQ$;PREFX$;QCQ$;LSTREW$;QCQ$;IR$;Q$ 2690 K=0:FOR I=1 TO 11:K=K+1:PRINT #3,Q$;DIRH$(K); 2700 FOR J=2 TO 9:K=K+1:PRINT #3,QCQ$;DIRH$(K);:NEXT:PRINT #3,Q$ 2710 NEXT:CLOSE 3:CLS:GOTO 300 2720 'routine to set RBBS defaults if no default file 2730 FOR I=1 TO 99:DIRH$(I)="----------":NEXT 2740 TOEDIT$="DIR99":DR$="A":UPDR$="A":BADFILE$="SKIPPED.LNS":D$="1":MAXPERPAGE$="20" 2750 MAXPAGE$="20":PREFX$="DIR":LSTREW$="8":IR$="R":EDFILE$="N" 2760 GOSUB 2770:RETURN 2762 A$=MAXPERPAGE$:MN=MINMPP:MX=20:RX=6:GOSUB 2870:MAXPERPAGE = X 2764 A$=MAXPAGE$:MN=1:MX=90:RX=8:GOSUB 2870:MAXPAGE = X 2766 A$=LSTREW$:MN=1:MX=13:RX=10:GOSUB 2870:LSTREW = X:RETURN 2770 IF IR$=NUL$ OR INSTR("RrIi",IR$)<3 THEN INSERTING = 0 ELSE INSERTING = -1 2775 IF INSTR("NnYy",MID$(EDFILE$,1,1))<3 THEN EDFILE=0 ELSE EDFILE=-1 2780 Z$=NUL$:GOSUB 2762 2810 IF Z$<>NUL$ THEN Z$="INVALID entries: "+Z$:RO=25:LSET ZZ$=Z$:GOSUB 860:R=RXX+FIRSTROW-1:PO=1:RETURN 2500 2820 IF DR$<>NUL$ AND MID$(PREFX$,2,1)<>":" THEN PRE$=DR$+":"+PREFX$ ELSE PRE$=PREFX$ 2830 LASTROW = FIRSTROW + MAXPERPAGE - 1 2840 'IF MAXPERPAGE THEN MAXENTRIES = MAXPAGE*MAXPERPAGE ELSE MAXENTRIES = MAXENTDIM 2845 'IF MAXENTRIES > MAXENTDIM THEN MAXENTRIES = MAXENTDIM 2850 ' IF MAXENTRIES < NPARMS+99 THEN X=NPARMS+99 ELSE X=MAXENTRIES 2860 RETURN 2870 GOSUB 2050:IF NOT NUMERIC THEN X=0:GOSUB 2900:RETURN 2880 X=VAL(A$):IF X<MN OR X>MX THEN GOSUB 2900:RETURN 2890 RETURN 2900 Z$=Z$+" >>"+A$+"<<":RXX=RX:RETURN 3000 DONE!=FNSECONDS!+PAUSE! 'pause routine based on clock 3010 IF FNSECONDS!<DONE! THEN 3010 3020 RETURN 3100 NFS = LEN(FLDSEP$) 3110 IF INSTR("NnYy",MID$(READSTREW$,1,1))>2 THEN INC=0:MAXEDIT=0 ELSE INC=1:MAXEDIT=1:CTITLE$(1)=MID$("STREW TO",1,LSTREW):MAX(1)=LSTREW:EFLDS(1)=1 3120 IF INSTR("FfVv",MID$(FIXEDLENGTH$,1,1))>2 THEN FIXEDLENGTH=0 ELSE FIXEDLENGTH=-1 3130 MAXFIELDS=NCOL+INC:GOSUB 8100:RETURN 3200 CLS 'Read RBBS configuration 3210 NORBBS = 0: DF$ = "RBBS.STW": CONSTREW$ = "RBBS":TOEDIT$=CONSTREW$ 3220 NAME DF$ AS DF$ 3240 LOCATE 12,15:PRINT "READING Configuration from ";DF$; 'entry if got default file 3250 OPEN DF$ FOR INPUT AS #1 3260 INPUT #1,TOEDIT$,DR$,UPDR$,BADFILE$,EDFILE$,D$,MAXPERPAGE$,MAXPAGE$,PREFX$,LSTREW$,IR$ 3270 FOR I=1 TO 99:INPUT #1,DIRH$(I):NEXT 3280 CLOSE 1:FLDSEP$=NUL$:RECSEP$=CR$+LF$ 3390 GOSUB 2770:RETURN 'process strings read in 3400 OPEN DF$ FOR INPUT AS #1 'Get general strew configuration 3405 LOCATE 10,5:PRINT "Reading Configuration File ";DF$;" ... ":P=37+LEN(DF$) 3410 INPUT #1,NCOL$,D$,MAXPERPAGE$,MAXPAGE$,PREFX$,LSTREW$,READSTREW$,FIXEDLENGTH$,FLDSEP$,RECSEP$:GOSUB 4900 3415 gosub 3100:XT=MAXFIELDS:MAXFIELDS=7:A$=SPACE$(5):NWRITE=0 3450 FOR I=1 TO NCOL 3460 W=FNE(I,1):INPUT #1,E$(W),E$(W+1),E$(W+2),E$(W+3),E$(W+4),E$(W+5),E$(W+6) 3470 GOSUB 3500:LOCATE 10,P:PRINT I; 3480 NEXT:CLOSE #1:MAXFIELDS=XT:CONSTREW$=MID$(DF$,1,INSTR(DF$,".")-1):RETURN 3500 'Process general strew configuration entry 3510 IX = I+INC:W=FNE(I,1) 3515 CTITLE$(IX)=E$(W) 3520 LSET A$=E$(W+1):MN=1:MX=80:GOSUB 2870:MAX(IX)=X 3530 LSET A$=E$(W+3):MN=1:MX=32000:GOSUB 2870:RCOL(I)=X 3540 LSET A$=E$(W+4):MN=1:MX=255:GOSUB 2870:RLEN(I)=X 3550 LSET A$=E$(W+5):MN=0:MX=NCOL:GOSUB 2870:IF X>0 THEN NWRITE=NWRITE+1:WORDER(NWRITE)=I 3560 IF INSTR("NnYy",MID$(E$(W+2),1,1))>2 THEN MAXEDIT=MAXEDIT+1:EFLDS(MAXEDIT)=IX 3570 IF INSTR("NnYy",MID$(E$(W+6),1,1))>2 THEN NQUO(I)=-1 ELSE NQUO(I)=0 3580 RETURN 3950 DF$=MID$(TOEDIT$,1,INSTR(TOEDIT$+".",".")-1)+".STW":RETURN 4000 WHSTREW = 2:MINMPP=0:NORBBS=-1 'General Strew Routine 4005 IF PARM$<>NUL$ THEN A$=PARM$:PARM$=NUL$:GOTO 4020 4010 LSET ZZ$="File to strew:":RO=1:GOSUB 860:LOCATE RO,16:INPUT "",A$:IF A$=NUL$ THEN 300 ELSE GOSUB 8000 4020 SWAP A$,TOEDIT$:GOSUB 3950:IF CONSTREW$<>MID$(DF$,1,INSTR(DF$+".",".")-1) THEN GOSUB 3400 ELSE XT=MAXFIELDS:GOSUB 3100:SWAP XT,MAXFIELDS:FOR I=1 TO NCOL:IX=I+INC:W=FNE(I,1):GOSUB 3560:NEXT:SWAP XT,MAXFIELDS 4200 MOREITEMS=-1:LO(1)=43:HI(1)=123 4210 FOR I=2 TO MAXFIELDS:LO(I)=14:HI(I)=255:NEXT 4220 STRT(1)=0:GOSUB 4950 4230 GOSUB 4800 4240 OPEN TOEDIT$ FOR INPUT AS #2:CLOSE 2 'Check file existence 4245 OPEN TOEDIT$ FOR APPEND AS #2:CLOSE 2 'Ensure that file ends with ctrl-z (compiled vers needs this) 4247 OPEN TOEDIT$ FOR INPUT AS #2:NREADS=0:GOSUB 4500 4250 IF MAXPERPAGE=0 THEN A$="S":GOTO 4270 ELSE GOSUB 335:GOSUB 910 4260 LSET ZZ$="S)trew...A)bort...E)dit again...([S],A,E)":RO=1:GOSUB 860:LOCATE RO,43:INPUT "",A$:GOSUB 8000 4270 ON INSTR("SAE",A$) GOTO 4280,300,4250 4275 IF QPARM THEN 330 ELSE 620 4280 GOSUB 1790:IF NOT MOREITEMS THEN 4275 4290 GOSUB 4500: IF NUMENT < 1 THEN 4275 ELSE 4250 4500 PREVSCRN=0:PREVPAGE=0 'General Read Routine 4520 GOSUB 4700:A$=SP$ 4530 IF EOF(2) THEN CLOSE 2:MOREITEMS=0:LSET ZZ$="All"+str$(NREADS)+" lines in "+TOEDIT$+" read.":RO=25:GOSUB 860:GOTO 820 4540 IF NUMENT >= MAXENTRIES THEN LSET ZZ$="NOT ALL items have been read from "+TOEDIT$:RO=25:GOSUB 860:GOTO 820 4550 NUMENT=NUMENT+1:P=1:NREADS=NREADS+1:LOCATE 12,32:PRINT NREADS; 4555 E$(FNE(NUMENT,1))=D$ 4560 FOR IX=1 TO NCOL 4570 I=RORDER(IX):IF P>=RCOL(I) THEN 4600 4580 X=RCOL(I)-P:IF X>255 THEN LSET A$=INPUT$(255,2):P=P+255:GOTO 4580 ELSE LSET A$=INPUT$(X,2):P=RCOL(I) 4600 E$(FNE(NUMENT,I+INC))=MID$(INPUT$(RLEN(I),2),1,MAX(I+INC)) 4610 P=P+RLEN(I) 4620 NEXT 4630 IF EOF(2) THEN 4530 ELSE LSET A$=INPUT$(1,2):IF A$<>CR$ THEN 4630 ELSE IF EOF(2) THEN 4530 ELSE LSET A$=INPUT$(1,2):GOTO 4530 4700 CLS:LOCATE 10,25:PRINT "Reading ";TOEDIT$; 4710 LOCATE 12,25:PRINT "Record "; 4720 NUMENT = 0:RETURN 4800 FOR I=1 TO NCOL:RORDER(I)=I:NEXT 4810 FOR I=1 TO NCOL-1 4820 FOR J=I+1 TO NCOL 4830 IF RCOL(RORDER(J-1))>RCOL(RORDER(J)) THEN SWAP RORDER(J-1),RORDER(J) 4840 NEXT:NEXT:RETURN 4900 GOSUB 2780 4910 A$=NCOL$:MN=1:MX=MAXDIM:GOSUB 2870:NCOL=X 4920 RETURN 4950 LASTSCRN=1:FIRSTFLD(1)=1:FLD2SCRN(1)=1 4960 FOR I=2 TO MAXFIELDS 4965 X=STRT(I-1) + MAX(I-1) + 2 4970 IF X+MAX(I)>80 THEN LASTSCRN=LASTSCRN+1:X=1:FIRSTFLD(LASTSCRN)=I 4975 FLD2SCRN(I)=LASTSCRN 4980 STRT(I)=X 4990 NEXT:FIRSTFLD(LASTSCRN+1)=MAXFIELDS+1:RETURN 5000 IF NWRITE<1 THEN RETURN ' General save routine 5005 Y = WORDER(1):X=Y+INC 5010 IF FIXEDLENGTH THEN 5080 5020 'Variable length processing 5030 IF NQUO(Y) THEN PRINT #1,Q$;E$(FNE(J,X));Q$; ELSE PRINT #1,E$(FNE(J,X)); 5040 FOR IX=2 TO NWRITE 5050 Y = WORDER(IX):X=Y+INC 5060 IF NQUO(Y) THEN PRINT #1,FLDSEP$;Q$;E$(FNE(J,X));Q$; ELSE PRINT #1,FLDSEP$;E$(FNE(J,X)); 5070 NEXT:GOTO 5150 5080 'Fixed length processing 5090 IF NQUO(Y) THEN PRINT #1,Q$;E$(FNE(J,X));SPACE$(MAX(X)-LEN(E$(FNE(J,X))));Q$; ELSE PRINT #1,E$(FNE(J,X));SPACE$(MAX(X)-LEN(E$(FNE(J,X)))); 5100 FOR IX=2 TO NWRITE 5110 Y = WORDER(IX):X= Y+INC 5120 IF NQUO(Y) THEN PRINT #1,FLDSEP$;Q$;E$(FNE(J,X));SPACE$(MAX(X)-LEN(E$(FNE(J,X))));Q$; ELSE PRINT #1,FLDSEP$;E$(FNE(J,X));SPACE$(MAX(X)-LEN(E$(FNE(J,X)))); 5130 NEXT 5140 ' PRINT "PRINTED REC ";J:INPUT XX$ 5150 PRINT #1,RECSEP$;:RETURN 5600 'save,restore overlap 5610 SWAP CTITLE$(1),E$(1799):SWAP CTITLE$(2),E$(1800) 5620 SWAP MAX(1),TEMP(3):SWAP MAX(2),TEMP(4) 5630 SWAP EFLDS(1),TEMP(1):SWAP EFLDS(2),TEMP(2) 5640 SWAP MAXEDIT,MXE 5650 RETURN 5700 LSET ZZ$="Configure - S)ave...T)emporary only...E)dit again ([S],T,E)":RO=1:GOSUB 860:LOCATE RO,61:INPUT "",A$:GOSUB 8000:RETURN 5800 MAXFIELDS = 2:GOSUB 8100 'Shared routine in config 5805 FOR I=1 TO MAXFIELDS:FLD2SCRN(I)=1:NEXT:FIRSTFLD(1)=1:FIRSTFLD(2)=MAXFIELDS+1:LASTSCRN=1 5810 MOREITEMS = 0 5820 CTITLE$(1)=" VALUE":CTITLE$(2)=" PARAMETER" 5830 LO(1) = 31 5840 HI(1) = 127 5850 STRT(1) = 3:STRT(2) = 19 5860 MAX(1) = 14:MAX(2) = 41 5870 MAXEDIT = 1 5880 EFLDS(1) = 1 5890 PREVPAGE=-1:GOSUB 820:RETURN 5900 'Default general strew config 5910 NCOL=1:D$="1":MAXPERPAGE=20:MAXPAGE=MAXMAX\MAXPERPAGE 5920 PREFX$="STRU":LSTREW=8:READSTREW$="N":FIXEDLENGTH=-1:FIXEDLENGTH$="F" 5930 FLDSEP$=NUL$:RECSEP$=CR$+LF$:NFS=LEN(FLDSEP$):MAX(1)=LSTREW:MAX(2)=10 5932 CTITLE$(1)="STREW TO":CTITLE$(2)="F1":MAXEDIT=2:EFLDS(1)=1:EFLDS(2)=2 5934 NQUO(1)=0:WORDER(1)=1:RCOL(1)=1:RLEN(1)=10:INC=1 5940 RETURN 5950 MAXPERPAGE$=E$(FNE(3,1)):MAXPAGE$=E$(FNE(4,1)):LSTREW$=E$(FNE(6,1)) 5955 Z$=NUL$:NCOL$=E$(FNE(1,1)):A$=NCOL$:MN=1:MX=MAXDIM:GOSUB 2870:NCOL=X 5960 GOSUB 2762 5970 IF Z$<>NUL$ THEN Z$="INVALID entries: "+Z$:RO=25:LSET ZZ$=Z$:GOSUB 860:R=RXX+FIRSTROW-1:PO=1:RETURN 6200 5980 MP=20:SWAP MP,MAXPERPAGE:RETURN 6000 MAXFIELDS=2:GOSUB 8100 'General strew configure 6010 E$(FNE(1,2))="Number of columns of data to read (1-99)" 6020 E$(FNE(2,2))="Default suffix of file to strew to" 6030 E$(FNE(3,2))="Maximum lines per screen (0-20,0=don't see))" 6040 E$(FNE(4,2))="Maximum # of screens of data" 6050 E$(FNE(5,2))="Prefix of files to strew to" 6060 E$(FNE(6,2))="Length of field identifying strew" 6070 E$(FNE(7,2))="Read strew field from file (Y,N)?" 6080 E$(FNE(8,2))="Output file is F)ixed...V)ariable length (F,V)" 6100 NUMENT = 8:PCOL=NCOL 6110 E$(FNE(1,1))=FNNSTR$(NCOL) 6120 E$(FNE(2,1))=D$ 6130 E$(FNE(3,1))=FNNSTR$(MAXPERPAGE):MAXPERPAGE=20 6140 E$(FNE(4,1))=FNNSTR$(MAXPAGE) 6150 E$(FNE(5,1))=PREFX$ 6160 E$(FNE(6,1))=FNNSTR$(LSTREW) 6170 E$(FNE(7,1))=READSTREW$ 6180 IF FIXEDLENGTH THEN E$(FNE(8,1))="F" ELSE E$(FNE(8,1))="V" 6190 GOSUB 5600:GOSUB 5800 6200 GOSUB 335:GOSUB 910 6210 GOSUB 5950:LSET ZZ$="FIELD separator:":SEP$=FLDSEP$ 6220 RO=FIRSTROW+NUMENT+1:GOSUB 860:GOSUB 6800:FLDSEP$=SEP$ 6230 LSET ZZ$="RECORD separator:":SEP$=RECSEP$ 6240 RO=FIRSTROW+NUMENT+2:GOSUB 860:GOSUB 6800:RECSEP$=SEP$ 6270 GOSUB 5700 6280 ON INSTR("STE",A$) GOTO 6300,6300,6200 6300 D$=E$(FNE(2,1)):PREFX$=E$(FNE(5,1)):IF INSTR("Ff",MID$(E$(FNE(8,1)),1,1))>0 THEN LSET FIXEDLENGTH$="F" ELSE LSET FIXEDLENGTH$="V" 6304 READSTREW$=E$(FNE(7,1)):GOSUB 5600:NUMENT=NCOL:MAXFIELDS=7:GOSUB 8100 6306 IF NCOL>PCOL THEN FOR I=PCOL+1 TO NCOL:CTITLE$(I+INC)="F"+FNNSTR$(I):NQUO(I)=0:WORDER(I)=I:NEXT 6308 FOR I=1 TO NCOL 6310 E$(FNE(I,1))=CTITLE$(I+INC) 6313 E$(FNE(I,2))=FNNSTR$(MAX(I+INC)) 6316 E$(FNE(I,3))="Y" 6319 E$(FNE(I,4))=FNNSTR$(RCOL(I)) 6322 E$(FNE(I,5))=FNNSTR$(RLEN(I)) 6325 IF WORDER(I)>0 THEN E$(FNE(WORDER(I),6))=FNNSTR$(I) ELSE E$(FNE(I,6))="0" 6328 IF NQUO(I) THEN E$(FNE(I,7))="Y" ELSE E$(FNE(I,7))="N" 6331 NEXT 6334 FOR I=1+INC TO MAXEDIT:E$(FNE(EFLDS(I)-INC,3))="Y":NEXT 6337 CTITLE$(1)="TITLE ":CTITLE$(2)="WIDTH":CTITLE$(3)="EDIT?" 6340 CTITLE$(4)="STARTS AT":CTITLE$(5)="# CHARS":CTITLE$(6)="ORDER OUT":CTITLE$(7)="QUOTES?" 6343 FOR I=1 TO MAXFIELDS:MAX(I)=LEN(CTITLE$(I)):EFLDS(I)=I:NEXT 6346 MAXEDIT=MAXFIELDS:STRT(1)=0:GOSUB 4950 6350 LO(2)=32:HI(2)=58 6360 LO(4)=32:HI(4)=58 6370 LO(5)=32:HI(5)=58 6380 LO(6)=32:HI(6)=58 6390 LO(3)=77:HI(3)=122 6400 LO(7)=77:HI(7)=122 6410 LO(1)=31:HI(1)=123 6420 GOSUB 2820:PREVPAGE=0:PREVSCRN=0:GOSUB 820 6430 GOSUB 335:GOSUB 910 6440 GOSUB 5700 6450 ON INSTR("STE",A$) GOTO 6470,6460,6430 6460 GOSUB 6500:GOTO 300 6470 GOSUB 6500:GOSUB 6600:GOTO 300 6500 'after edit 6510 MAXEDIT=0:Z$=NUL$:A$=SPACE$(5):NWRITE=0 6520 FOR I=1 TO NCOL:GOSUB 3500:NEXT 6530 IF Z$<>NUL$ THEN Z$="INVALID entries: "+Z$:RO=25:LSET ZZ$=Z$:GOSUB 860:R=RXX+FIRSTROW-1:PO=1:RETURN 6430 6540 MAXPERPAGE=MP:CLS:RETURN 6600 LOCATE 10,10:PRINT "SAVING Configuration to ";DF$; 'save general strew config 6610 OPEN DF$ FOR OUTPUT AS #3:CONSTREW$=MID$(DF$,1,INSTR(DF$,".")-1) 6620 PRINT #3,Q$;NCOL$;QCQ$;D$;QCQ$;MAXPERPAGE$;QCQ$;MAXPAGE$;QCQ$;PREFX$;QCQ$;LSTREW$;QCQ$;READSTREW$;QCQ$;FIXEDLENGTH$; 6630 PRINT #3,QCQ$;FLDSEP$;QCQ$;RECSEP$;Q$ 6640 FOR I=1 TO NCOL 6650 PRINT #3,Q$;E$(FNE(I,1));:FOR J=2 TO 7:PRINT #3,QCQ$;E$(FNE(I,J));:NEXT:PRINT #3,Q$ 6660 NEXT:CLOSE 3:RETURN 6700 LOCATE 18,10:PRINT "Enter character";I;" in separator: ";:LOCATE 18,POS(0),1,6,7:A$=INPUT$(1):SEP$=SEP$+A$ 6710 LOCATE RO,P:IF A$ = CR$ THEN P$="<CR>" ELSE IF A$=LF$ THEN P$="<LF>" ELSE IF A$=SP$ THEN P$="<sp>" ELSE P$=A$ 6720 PRINT P$;:P=P+LEN(P$):RETURN 6800 P=19:IF SEP$=NUL$ THEN LOCATE RO,P:PRINT "<none>";:GOTO 6820 'Process field & record separators 6810 FOR I=1 TO LEN(SEP$):A$=MID$(SEP$,I,1):GOSUB 6710:NEXT 6820 INPUT " Change separator (Y,[N])? ",A$:IF INSTR("NnYy",A$)<3 THEN RETURN 6830 XY=RO:RO=17:LSET ZZ$="Enter number of characters in separator: ":GOSUB 860 6840 LOCATE RO,42:INPUT "",A$:GOSUB 2050:IF NOT NUMERIC THEN BEEP:GOTO 6840 6850 NFS=VAL(A$):P=19:RO=XY:SEP$=NUL$:LOCATE RO,P:PRINT SPACE$(79-P); 6860 FOR I=1 TO NFS:GOSUB 6700:NEXT 6870 RETURN 8000 'convert a$ to upper case 8010 FOR I=1 TO LEN(A$):MID$(A$,I,1)=CHR$( ASC(MID$(A$,I,1)) + 32*(ASC(MID$(A$,I,1))>96) ):NEXT:RETURN 8100 MAXENTRIES = MAXMAX \ MAXFIELDS:RETURN 9000 ' GETS DOS PASSED PARAMETER 9010 DEF SEG:DIM SUBR%(3):DEF USR0=VARPTR(SUBR%(0)) 9020 SUBR%(0)=&H5B59:SUBR%(1)=&H5153:SUBR%(2)=&HEB83:SUBR%(3)=&HCB10 9030 I%=0:PSP%=USR0(I%):DEF SEG=PSP%:PARMLEN%=PEEK(&H80):PARM$=NUL$:A$=NUL$ 9035 IF PARMLEN%<1 THEN 9060 9040 FOR I% = 2 TO PARMLEN%:A$=A$+CHR$(PEEK(&H80+I%)):NEXT I% 9050 GOSUB 8000:IF RIGHT$(A$,2)=" Q" THEN QPARM=-1:A$=MID$(A$,1,LEN(A$)-2) ELSE QPARM=0 9055 IF A$=SPACE$(LEN(A$)) THEN A$=NUL$ 9060 RETURN 10000 'ERROR processing 10020 IF ERL=3220 THEN IF ERR=58 THEN RESUME 3240 ELSE IF ERR=53 THEN GOSUB 10950:IF X=1 THEN GOSUB 2720:RESUME 2166 ELSE RESUME 300 10040 IF ERL=560 THEN IF ERR=53 THEN GOSUB 10900:IF TOEDIT$<>NUL$ THEN RESUME 540 ELSE resume 300 10060 IF ERL=2110 THEN IF ERR=53 THEN IF IX<LEN(ZDR$) THEN IX=IX+1:RESUME 2110 ELSE FILEFOUND=0:RESUME 2120 10065 IF ERL=2138 THEN IF ERR=58 THEN RESUME 2140 ELSE IF ERR=53 THEN RESUME 2142 10070 IF ERL=2148 THEN IF ERR=58 THEN RESUME 2150 ELSE IF ERR=53 THEN RESUME 2142 10072 IF ERL=3400 AND ERR=53 THEN GOSUB 10950:IF X=1 THEN RESUME 2144 ELSE RESUME 300 10073 IF ERL=3400 AND ERR=52 THEN A$=DF$:GOSUB 10980:DF$=A$:RESUME 3400 10075 IF ERL=4240 THEN IF ERR=53 THEN GOSUB 10900:IF TOEDIT$<>NUL$ THEN RESUME 4240 ELSE RESUME 300 10077 IF ERL=4240 AND ERR=52 THEN A$=TOEDIT$:GOSUB 10980:TOEDIT$=A$:RESUME 4240 10080 CLS:PRINT "Unexpected error # ";ERR;" occurred on line ";ERL;"." 10100 GOSUB 1590:GOTO 330 10900 LSET ZZ$="Missing file "+TOEDIT$:RO=1:GOSUB 860:LOCATE RO,30:INPUT "<rtn> to quit, or enter name: ",TOEDIT$:CLS:RETURN 10950 LOCATE 8,10:PRINT "NO CONFIGURATION exists for ";TOEDIT$; 10960 RO=1:LSET ZZ$="C)reate one...A)bort ([C],A):":GOSUB 860:LOCATE RO,35:INPUT "",A$:GOSUB 8000 10970 X=INSTR("CA",A$):IF X<1 THEN BEEP:GOTO 10960 ELSE RETURN 10980 LSET ZZ$="Invalid filename: "+A$:RO=1:GOSUB 860:LOCATE RO,30:INPUT "<rtn> to quit, or enter name: ",A$:CLS:IF A$=NUL$ then RESUME 300 ELSE RETURN